"""
一。列表推导，用于快速的产生一个列表。(列表生成式)
    list = [表达式 for x in 范围]
           [表达式 for x in 范围 if 条件]
           [表达式 for x in 范围 for y in 范围]

    满足该公式，所有范围的数--->列表中
        内存中：列表推导范围较大，一次性产生所有的数据存入了列中

二。生成器(generator)
    生成器：在python中，一边循环，一边产生数据，就叫做生成器。
        理解：按照某种规则，产生数据。

    方法一：只要把列表推导的[],改成()，就获得一个generator。
    方法二：使用函数，使用yield关键字，那么该函数就是是一个生成器
        step1:定义一个函数，用于产生数据
            def 函数名():
            ..
            yield 生成的数据
        step2：根据函数，产生一个生成器对象
        step3：依次获取数据

"""
"""
难点：关于生成器函数的执行过程
    变成了生成器的函数，在每次next()函数调用的时候，执行，遇到yiled 返回结果，并暂停。直到下次调用next()
"""
list1 = [x for x in range(1, 6)]
print(list1)
print(type(list1))

# generator
a = (x for x in range(1, 6))
print(a)
print(type(a))


# print(list(a))


# print(next(a))
# print(next(a))
# print(next(a))
# next(a)
# print(next(a))
# print(next(a))  # StopIteration

# for i in a:
#     print(i)


# 第二种 获取 生成器的方式, 使用yield关键字,通过函数的方式


# def 函数名():
#     ..
#     yield 生成的数据

def get_generator():
    print('for 之前...')
    for i in range(1, 6):
        yield i
        # return i


print('*' * 20)
b = get_generator()
# print(b)

print(next(b))
print(next(b))
print(next(b))
print(next(b))
